Software-defined networking (SDN) is an approach to building computer networking equipment and software that separates and abstracts elements of these systems. These elements are called the control plane and the data plane.
An SDN controller is an application in SDN that manages flow control to enable intelligent networking. SDN controllers are based on protocols, such as OpenFlow, that allow servers to guide switches in terms of where to send packets and enables software to run on numerous types of hardware, rather than being tied down to proprietary equipment from one supplier. The controller may be considered the core of an SDN or similar controller-based system. The controller may lie between network devices at one end and applications at the other end. Any communications between applications and devices go through the controller. The controller also uses protocols such as OpenFlow to configure network devices and choose the optimal network path for application traffic.